/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package classes;

import database.DbConnection;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author mrossetti
 */
public class Articolo {
    
    private int _IDArticolo;
    private String _Codice_articolo;
    private String _Nome_articolo;
    private String _Note;
    private ArrayList<Articoli_Componenti> _Componenti;
    private database.DbConnection Db;
    
    public Articolo(){
        _IDArticolo = -1;
        _Codice_articolo = "";
        _Nome_articolo = "";
        _Note = "";
        _Componenti = new ArrayList<Articoli_Componenti>();
        Db = null;
    }
    
    public void setIDArticolo(int IDArticolo){
        _IDArticolo = IDArticolo;
    }
    
    public int getIDArticolo(){
        return _IDArticolo;
    }
    
    public void setCodiceArticolo(String Codice_articolo){
        _Codice_articolo = Codice_articolo;
    }
    
    public String getCodiceArticolo(){
        return _Codice_articolo;
    }
    
    public void setNomeArticolo(String Nome_articolo){
        _Nome_articolo = Nome_articolo;
    }
    
    public String getNomeArticolo(){
        return _Nome_articolo;
    }
    
    public void setNote(String Note){
        _Note = Note;
    }
    
    public String getNote(){
        return _Note;
    }
    
    public void setComponenti(ArrayList<Articoli_Componenti> Componenti){
        _Componenti = Componenti;
    }
    
    public ArrayList<Articoli_Componenti> getComponenti(){
        return _Componenti;
    }
    
    public void load(){
        Db = new DbConnection();
        if(getIDArticolo() >= 0){
            ResultSet rs = Db.getResultSet("SELECT * FROM articoli WHERE IDARTICOLO = " + getIDArticolo());
            try{
                if(rs.next()){
                    setCodiceArticolo(rs.getString("codice_articolo"));
                    setNomeArticolo(rs.getString("nome_articolo"));
                    setNote(rs.getString("Note"));
                }
                rs.close();
                Db.CloseConnection();
                loadComponenti();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, e.getMessage());
                Db.CloseConnection();
            }
        }
    }

    public void load(String Codice){
        Db = new DbConnection();
        ResultSet rs = Db.getResultSet("SELECT * FROM articoli WHERE UPPER(Codice_articolo) = '" + Codice.toUpperCase().replaceAll("'", "''") + "'");
        try{
            if(rs.next()){
                setIDArticolo(rs.getInt("IDarticolo"));
                setCodiceArticolo(rs.getString("codice_articolo"));
                setNomeArticolo(rs.getString("nome_articolo"));
                setNote(rs.getString("Note"));
            }
            rs.close();
            Db.CloseConnection();
            loadComponenti();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
            Db.CloseConnection();
        }
    }
    
    public void loadComponenti(){
        Db = new DbConnection();
        _Componenti = new ArrayList<Articoli_Componenti>();
        if(getIDArticolo() >= 0){
            ResultSet rs = Db.getResultSet("SELECT * FROM articoli_componenti WHERE IDARTICOLO = " + getIDArticolo());
            try{
                while(rs.next()){
                    Articoli_Componenti temp = new Articoli_Componenti();
                    temp.setIDComponente(rs.getInt("idcomponente"));
                    temp.load();
                    temp.setQta(rs.getInt("qta"));
                    _Componenti.add(temp);
                }
                rs.close();
                Db.CloseConnection();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, e.getMessage());
                Db.CloseConnection();
            }
        }
    }
    
    public boolean save(){
        boolean res = false;
        Db = new DbConnection();
        String SQL = "";
        if(getIDArticolo() < 0){
            SQL = "INSERT INTO articoli(codice_articolo, nome_articolo, note) ";
            SQL = SQL + "VALUES('" + getCodiceArticolo().replaceAll("'", "''") + "', '" + getNomeArticolo().replaceAll("'", "''") + "', '" + getNote().replaceAll("'", "''") +"')";
        }else{
            SQL = SQL + "UPDATE articoli SET ";
            SQL = SQL + "codice_articolo = '" + getCodiceArticolo().replaceAll("'", "''") + "', ";
            SQL = SQL + "nome_articolo = '" + getNomeArticolo().replaceAll("'", "''") + "', ";
            SQL = SQL + "Note = '" + getNote().replaceAll("'", "''") + "' ";
            SQL = SQL + "WHERE IDARTICOLO = " + getIDArticolo();
        }
        if(Db.executeQuery(SQL)){
            Articolo temp = new Articolo();
            temp.load(getCodiceArticolo());
            setIDArticolo(temp.getIDArticolo());
            SQL = "DELETE FROM articoli_componenti WHERE IDARTICOLO = " + getIDArticolo();
            if(Db.executeQuery(SQL)){
                SQL = "";
                for(int i = 0;i<getComponenti().size();i++){
                    SQL = "INSERT INTO articoli_componenti(IDARTICOLO, IDCOMPONENTE, QTA) VALUES";
                    SQL = SQL + "(" + getIDArticolo() + ", " + getComponenti().get(i).getIDComponente() + ", " + getComponenti().get(i).getQta() + ")";
                    if(!Db.executeQuery(SQL)){
                        Db.CloseConnection();
                        return false;
                    }
                }
                res = true;
            }
        }
        Db.CloseConnection();
        return res;
    }
    
    public boolean delete(){
        boolean res = false;
        Db = new DbConnection();
        String SQL = "DELETE FROM articoli WHERE IDARTICOLO = " + getIDArticolo();
        if(Db.executeQuery(SQL)){
            SQL = "DELETE FROM articoli_componenti WHERE IDARTICOLO = " + getIDArticolo();
            if(Db.executeQuery(SQL)){
                res = true;
            }
        }
        
        return res;
    }
}
